package current_scope

import "github.com/timandy/routine"

//
// 在 routine 库基础上实现请求作用域内共享的存储，
// 通过在 gin 中注册中间件 CurrentScopeHandler，
// 可以在请求开始前和结束后自动清理掉脏数据。
//

var _ThreadLocal = routine.NewThreadLocal[map[string]any]()

func GetAll() map[string]any {
	return _ThreadLocal.Get()
}

func SetAll(keyValues map[string]any) {
	_ThreadLocal.Set(keyValues)
}

func RemoveAll() {
	_ThreadLocal.Remove()
}

// 获取指定键的值
func Get(key string) any {
	keyValues := _ThreadLocal.Get()

	if keyValues == nil {
		return nil
	}

	value, ok := keyValues[key]
	if !ok {
		return nil
	}

	return value
}

// 设置键值对
func Set(key string, value any) {
	keyValues := _ThreadLocal.Get()

	if keyValues == nil {
		keyValues = map[string]any{}
		_ThreadLocal.Set(keyValues)
	}

	keyValues[key] = value
}

// 移除指定的键
func Remove(key string) {
	keyValues := _ThreadLocal.Get()

	if keyValues != nil {
		delete(keyValues, key)
	}
}
